﻿<UserControl x:Class="SimpleControls.ComboBox.ComboBoxWithLabel"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" 
             d:DesignHeight="100"
             d:DesignWidth="453"

             xmlns:local="clr-namespace:SimpleControls.ComboBox"
             >
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
      <!-- This will bind the Content property on the label to the 'LabelContent' property on this control-->
    <Label Content="{Binding Path=LabelContent, RelativeSource={RelativeSource FindAncestor, AncestorType=local:ComboBoxWithLabel, AncestorLevel=1}}" 
                       HorizontalAlignment="Left" VerticalAlignment="Bottom" Grid.Row="0"/>

      <!-- This will bind the ItemsSource of the ComboBox to this control's ItemsSource property -->
    <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=local:ComboBoxWithLabel, AncestorLevel=1}, Path=ItemsSource}"
                DisplayMemberPath="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=local:ComboBoxWithLabel, AncestorLevel=1}, Path=DisplayMemberPath}"
                SelectedValuePath="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=local:ComboBoxWithLabel, AncestorLevel=1}, Path=SelectedValuePath}"
                SelectedValue="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=local:ComboBoxWithLabel, AncestorLevel=1}, Path=SelectedValue}"
                SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=local:ComboBoxWithLabel, AncestorLevel=1}, Path=SelectedItem}"
                SelectedIndex="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=local:ComboBoxWithLabel, AncestorLevel=1}, Path=SelectedIndex}"
                VerticalAlignment="Top" HorizontalAlignment="Stretch"
                Grid.Row="1">
      </ComboBox>
      <!-- you can do the same thing with SelectedValuePath, DisplayMemberPath, etc, but this illustrates the technique -->
  </Grid>
</UserControl>
